import { RouteRecordRaw } from 'vue-router';

/**
 * 建议：路由 path 路径与文件夹名称相同，找文件可浏览器地址找，方便定位文件位置
 *
 * 路由meta对象参数说明
 * meta: {
 *      title:          菜单栏及 tagsView 栏、菜单搜索名称（国际化）
 *      isLink：        是否超链接菜单，开启外链条件，`1、isLink: 链接地址不为空 2、isIframe:false`
 *      isHide：        是否隐藏此路由
 *      isKeepAlive：   是否缓存组件状态
 *      isAffix：       是否固定在 tagsView 栏上
 *      isIframe：      是否内嵌窗口，开启条件，`1、isIframe:true 2、isLink：链接地址不为空`
 *      roles：         当前路由权限标识，取角色管理。控制路由显示、隐藏。超级管理员：admin 普通角色：common
 *      icon：          菜单、tagsView 图标，阿里：加 `iconfont xxx`，fontawesome：加 `fa xxx`
 * }
 */

// 扩展 RouteMeta 接口
declare module 'vue-router' {
	interface RouteMeta {
		title?: string;
		isLink?: string;
		isHide?: boolean;
		isKeepAlive?: boolean;
		isAffix?: boolean;
		isIframe?: boolean;
		roles?: string[];
		icon?: string;
	}
}

/**
 * 定义动态路由
 * 前端添加路由，请在顶级节点的 `children 数组` 里添加
 * @description 未开启 isRequestRoutes 为 true 时使用（前端控制路由），开启时第一个顶级 children 的路由将被替换成接口请求回来的路由数据
 * @description 各字段请查看 `/@/views/system/menu/component/addMenu.vue 下的 ruleForm`
 * @returns 返回路由菜单数据
 */
export const dynamicRoutes: Array<RouteRecordRaw> = [
	{
		path: '/',
		name: '/',
		component: () => import('/@/layout/index.vue'),
		redirect: '/home',
		meta: {
			isKeepAlive: true,
		},
		children: [
			{
				path: '/home',
				name: 'home',
				component: () => import('/@/views/home/index.vue'),
				meta: {
					title: 'message.router.home',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: true,
					isIframe: false,
					roles: ['teacher', 'student', 'administrator'],
					icon: 'iconfont icon-shouye',
				},
			},
			{
				path: '/student',
				name: 'student',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/student/management',
				meta: {
					title: 'message.router.student',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['teacher'],
					icon: 'iconfont icon-gerenzhongxin',
				},
				children: [
					{
						path: '/student/management',
						name: 'studentManagement',
						component: () => import('/@/views/student/management/index.vue'),
						meta: {
							title: 'message.router.studentManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'iconfont icon-shuju',
						},
					},
					{
						path: '/student/group',
						name: 'studentGroup',
						component: () => import('/@/views/student/group/index.vue'),
						meta: {
							title: 'message.router.studentGroup',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'iconfont icon-putong',
						},
					},
				],
			},
			{
				path: '/experiments',
				name: 'experiments',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/experiments/management',
				meta: {
					title: 'message.router.experiments',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['teacher', 'student', 'administrator'],
					icon: 'ele-Cpu',
				},
				children: [
					{
						path: '/experiments/management',
						name: 'experimentsManagement',
						component: () => import('/@/views/experiments/management/index.vue'),
						meta: {
							title: 'message.router.experimentsManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher', 'student', 'administrator'],
							icon: 'ele-Coordinate',
						},
					},
					{
						path: '/experiments/release',
						name: 'experimentsRelease',
						component: () => import('/@/views/experiments/release/index.vue'),
						meta: {
							title: 'message.router.experimentsRelease',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'ele-DataLine',
						},
					}
				],
			},
			{
				path: '/equipments',
				name: 'equipments',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/equipments/management',
				meta: {
					title: 'message.router.equipments',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['teacher', 'administrator'],
					icon: 'iconfont icon-AIshiyanshi',
				},
				children: [
					{
						path: '/equipments/management',
						name: 'equipmentsManagement',
						component: () => import('/@/views/equipments/management/index.vue'),
						meta: {
							title: 'message.router.equipmentsManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher', 'administrator'],
							icon: 'ele-Monitor',
						}
					},
					{
						path: '/equipments/release',
						name: 'equipmentsRelease',
						component: () => import('/@/views/equipments/release/index.vue'),
						meta: {
							title: 'message.router.equipmentsRelease',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'ele-Box',
						},
					},
				],
			},
			{
				path: '/grade',
				name: 'grade',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/grade/management',
				meta: {
					title: 'message.router.grade',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['teacher', 'student'],
					icon: 'ele-Document',
				},
				children: [
					{
						path: '/grade/management',
						name: 'gradeManagement',
						component: () => import('/@/views/grade/management/index.vue'),
						meta: {
							title: 'message.router.gradeManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'ele-DocumentCopy',
						},
					},
					{
						path: '/grade/evaluation',
						name: 'gradeEvaluation',
						component: () => import('/@/views/grade/evaluation/index.vue'),
						meta: {
							title: 'message.router.gradeEvaluation',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['student'],
							icon: 'ele-ChatLineRound',
						},
					},
					{
						path: '/grade/statistics',
						name: 'gradeStatisticse',
						component: () => import('/@/views/grade/statistics/index.vue'),
						meta: {
							title: 'message.router.gradeStatistics',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['teacher'],
							icon: 'iconfont icon-ico_shuju',
						},
					}
				],
			},
			{
				path: '/file',
				name: 'file',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/file/submit',
				meta: {
					title: 'message.router.file',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['student'],
					icon: 'ele-Collection',
				},
				children: [
					{
						path: '/file/submit',
						name: 'fileSubmit',
						component: () => import('/@/views/file/submit/index.vue'),
						meta: {
							title: 'message.router.fileSubmit',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['student'],
							icon: 'ele-DocumentChecked',
						},
					}
				],
			},
			{
				path: '/teacher',
				name: 'teacher',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/teacher/management',
				meta: {
					title: 'message.router.teacher',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['administrator'],
					icon: 'ele-User',
				},
				children: [
					{
						path: '/teacher/management',
						name: 'teacherManagement',
						component: () => import('/@/views/teacher/management/index.vue'),
						meta: {
							title: 'message.router.teacherManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['administrator'],
							icon: 'ele-Suitcase',
						},
					}
				],
			},
			{
				path: '/class',
				name: 'class',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/class/management',
				meta: {
					title: 'message.router.class',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['administrator'],
					icon: 'ele-Coin',
				},
				children: [
					{
						path: '/class/management',
						name: 'classManagement',
						component: () => import('/@/views/class/management/index.vue'),
						meta: {
							title: 'message.router.classManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['administrator'],
							icon: 'ele-CreditCard',
						},
					}
				],
			},
			{
				path: '/pupil',
				name: 'pupil',
				component: () => import('/@/layout/routerView/parent.vue'),
				redirect: '/pupil/management',
				meta: {
					title: 'message.router.pupil',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['administrator'],
					icon: 'ele-Connection',
				},
				children: [
					{
						path: '/pupil/management',
						name: 'pupilManagement',
						component: () => import('/@/views/pupil/management/index.vue'),
						meta: {
							title: 'message.router.pupilManagement',
							isLink: '',
							isHide: false,
							isKeepAlive: true,
							isAffix: false,
							isIframe: false,
							roles: ['administrator'],
							icon: 'ele-Folder',
						},
					}
				],
			},
			{
				path: '/personal',
				name: 'personal',
				component: () => import('/@/views/personal/index.vue'),
				meta: {
					title: 'message.router.personal',
					isLink: '',
					isHide: false,
					isKeepAlive: true,
					isAffix: false,
					isIframe: false,
					roles: ['teacher', 'student', 'administrator'],
					icon: 'iconfont icon-gerenzhongxin',
				},
			},
		],
	},
];

/**
 * 定义404、401界面
 * @link 参考：https://next.router.vuejs.org/zh/guide/essentials/history-mode.html#netlify
 */
export const notFoundAndNoPower = [
	{
		path: '/:path(.*)*',
		name: 'notFound',
		component: () => import('/@/views/error/404.vue'),
		meta: {
			title: 'message.staticRoutes.notFound',
			isHide: true,
		},
	},
	{
		path: '/401',
		name: 'noPower',
		component: () => import('/@/views/error/401.vue'),
		meta: {
			title: 'message.staticRoutes.noPower',
			isHide: true,
		},
	},
];

/**
 * 定义静态路由（默认路由）
 * 此路由不要动，前端添加路由的话，请在 `dynamicRoutes 数组` 中添加
 * @description 前端控制直接改 dynamicRoutes 中的路由，后端控制不需要修改，请求接口路由数据时，会覆盖 dynamicRoutes 第一个顶级 children 的内容（全屏，不包含 layout 中的路由出口）
 * @returns 返回路由菜单数据
 */
export const staticRoutes: Array<RouteRecordRaw> = [
	{
		path: '/login',
		name: 'login',
		component: () => import('/@/views/login/index.vue'),
		meta: {
			title: '登录',
		},
	},
	{
		path: '/register',
		name: 'register',
		component: () => import('/@/views/register/index.vue'),
		meta: {
			title: '注册',
		}
	},
	{
		path: '/forget',
		name: 'forget',
		component: () => import('/@/views/forget/index.vue'),
		meta: {
			title: '忘记密码',
		}
	},
	/**
	 * 提示：写在这里的为全屏界面，不建议写在这里
	 * 请写在 `dynamicRoutes` 路由数组中
	 */
];
